package tool;

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/*
 * 汽服图片处理工具
 */
public class qf_picture {
//    private double TEXT_SIMILAR = 0.4; // 文本相似度
    private String ROOT_PATH = "D:\\temp\\img_old"; // 起始搜索文件目录
    private String TARGET_PATH = "D:\\temp\\自动整理"; // 目标放置目录

    private List<String> listUserPath = new ArrayList<String>();
    private Map<String,String> STORE_MAP = new HashMap<String, String>(){{ // 比较用门店map



        put("昌乐县车保姆汽车装饰店","109");
        put("潍坊爱之恋汽车养护服务有限公司","110");
        put("高密市靓丽车族汽车美容心","111");
        put("高密市众宝汽车修理厂","112");
        put("高密市新艺汽车装潢中心","113");
        put("高密市路邦汽车用品销售中心","114");
        put("高密市光升汽车服务中心","115");
        put("高密市美克美车汽车服务会所","116");
        put("临朐县福特莱汽车美容服务中心","117");
        put("临朐县天宝汽车装饰服务部","118");
        put("临朐县侯瑞全汽车美容养护中心","119");
        put("昌邑市都昌路大龙汽车美容店","120");
        put("昌邑市香邑城市花园靓车坊汽车装饰部","121");
        put("昌邑市维客利汽车美容广场","122");
        put("昌邑市一分利汽车服务有限公司","123");
        put("奎文区东关无限美汽车服务中心","124");
        put("菏泽市牡丹区汇宾城汽车装具销售中心","125");
        put("菏泽市牡丹区歌行汽车美容店","126");
        put("菏泽市牡丹区尚品坊汽车用品商行","127");
        put("菏泽开发区广朋汽车配件经营部","128");
        put("菏泽市牡丹区佳旭汽车服务有限公司","129");
        put("菏泽市牡丹区云磊汽车美容店","130");
        put("菏泽市牡丹区乐丰汽车美容中心","131");
        put("WMCZH","132");
        put("菏泽市牡丹区海雷汽车美容装饰部","133");
        put("菏泽市牡丹区志鹏汽车装具销售中心","134");
        put("菏泽市牡丹区家轩汽车美容店","135");
        put("菏泽市牡丹区捷丽汽车美容店","136");
        put("菏泽市牡丹区博奥汽车美容中心","137");
        put("菏泽市牡丹区阔宁汽车美容服务部","138");
        put("WZHMC","139");
        put("菏泽市牡丹区志明汽车装饰经营部","140");
        put("菏泽市开发区贺骏汽车美容中心","141");
        put("菏泽市开发区爱途汽车装饰中心","142");
        put("菏泽开发区明帅汽车装饰中心","143");
        put("巨野县超东道汽配中心","144");
        put("巨野县车隆钣金喷漆门市","145");
        put("巨野县怡景汽车美容店","146");
        put("成武县车博士汽车美容养护中心","147");
        put("成武县车言车语汽车美容装饰连锁店","148");
        put("成武县卡耐尔汽车美容店","149");
        put("曹县金牌汽车用品有限公司","150");
        put("曹县磐石街道车车安汽车服务中心","151");
        put("曹县青菏街道众途汽车美容服务中心","152");
        put("曹县磐石街道办事处金牌汽车美容装饰总汇","153");
        put("曹县一方汽车用品销售有限公司","154");
        put("单县梅特莱斯汽车美容中心","155");
        put("单县顺捷通达汽车俱乐部","156");
        put("德州市德城区德派车饰用品牌","157");
        put("德州市德城区车都世家汽车用品店","158");
        put("德州市德城区卓祥汽车装饰美容店","159");
        put("德州市金车行服务有限公司","160");
        put("德州路油油气销售有限公司","161");
        put("德州市经济技术开发区德福一站式服务广场","162");
        put("德州市经济技术开发区卡莱汽车装具经销处","163");
        put("德州正鑫汽车装饰有限公司","164");
        put("德州速达家政服务有限公司","165");
        put("德州速达家政服务有限公司","166");
        put("德州速达家政服务有限公司","167");
        put("德州市德城区广诺汽车维修中心","168");
        put("德州经济开发区靓车地带汽车装具美容护理部","169");
        put("德州经济开发区靓达汽车用品总店","170");
        put("德州经济开发区圣驰汽车维修中心","171");
        put("德州市德城区金色阳光汽车用品商行","172");
        put("德州市德城区聚鑫汽车装具销售处","173");
        put("德州市德城区国通汽车服务店","174");
        put("德州市运河经济开发区亮爽汽车美容店","175");
        put("德州市德城区靓靓靓汽车装具店","176");
        put("德州市德城区新征程","177");
        put("德州运河经济开发区酷车汽车美容装饰店","178");
        put("德州市陵城区发骏汽车维修厂","179");
        put("德州市陵城区车福汽车维修有限公司","180");
        put("陵县英明轮胎门市部","181");
        put("陵城区宇月腾达汽车用品店","182");
        put("德州市陵城区隆鑫汽车维修服务部","183");
        put("平原县华达轿车装饰美容中心","184");
        put("平原县皓轩汽车装俱店","185");
        put("平原县御马房汽车装具店","186");
        put("平原县华达之美汽车服务会所","187");
        put("平原县贵族俊捷汽车装具美容店","188");
        put("夏津县好快省汽车服务有限公司","189");
        put("夏津县鸿达飞汽车装具经营店","190");
        put("夏津县车艺美汽车美容服务中心","191");
        put("夏津县天蓝天汽车用品销售店","192");
        put("夏津县飞天汽车装饰美容部","193");
        put("禹城市俊山汽车装具店","194");
        put("禹城市炫车坊汽车美容店","195");
        put("禹城市大拇指汽车美容养护服务店","196");
        put("禹城市大拇指汽车美容养护服务店","197");
        put("禹城市车泰鑫安汽车服务有限公司","198");
        put("齐河县爱车行汽车美容店","199");
        put("齐河县靓车港汽车美容中心","200");
        put("齐河县美美美汽车用品店","201");
        put("齐河县李凯汽车用品经营部","202");
        put("齐河县新大陆美车服务店","203");
        put("济宁市任城区香彬汽车服务中心","204");
        put("济宁市任城区周安汽车服务中心","205");
        put("济宁市高新区城市之星汽车装饰美容中心","206");
        put("济宁高新区车博士汽车服务中心","207");
        put("济宁市永昊汽车装饰有限公司","208");
        put("济宁市任城区文康汽车美容服务中心","209");
        put("济宁市任城区文康汽车美容服务中心","210");
        put("济宁龙御汽车服务有限公司","211");
        put("济宁市任城区精锐汽车养护中心","212");
        put("济宁高新区蓝咖汽车美容店","213");
        put("济宁高新区蒋蒋车饰店","214");
        put("济宁高新区友固轮胎销售部","215");
        put("济宁高新区铭匠车饰店","216");
        put("济宁科锐汽车维修有限公司","217");
        put("济宁市任城区爱洗车汽车美容会所","218");
        put("济宁市任城区亿阳车行","219");
        put("济宁高新区二环汽车服务中心","220");
        put("济宁高新区凯捷汽车服务中心","221");
        put("济宁佳润汽车科技服务有限责任公司","222");
        put("济宁高新区鑫源汽车美容会所","223");
        put("济宁市任城区鑫动力汽车饰品销售中心","224");
        put("济宁唯美汽车装饰用品有限公司","225");
        put("济宁市任城区亚美汽车用品批发部","226");
        put("济宁市任城区刘猛汽车用品店","227");
        put("济宁市任城区建伟保洁服务中心","228");
        put("济宁市任城区领驰轮胎销售部","229");
        put("济宁市任城区大拇哥汽车服务中心","230");
        put("济宁市任城区爱车途腾汽车美容养护中心","231");
        put("济宁市车伴儿汽车服务有限公司","232");
        put("济宁梦东汽车用品有限公司","233");
        put("济宁海众汽车维修服务有限公司","234");
        put("曲阜市誉嘉汽车服务中心","235");
        put("曲阜市迦南轮胎销售中心","236");
        put("泰安快车手汽车服务有限公司曲阜分公司","237");
        put("曲阜市颜杭汽车用品销售店","238");
        put("曲阜市车是客汽车装具中心","239");
        put("曲阜市美达汽车美容中心","240");
        put("济宁市兖州区梅鸽汽车美容中心","241");
        put("济宁曼佐尼汽车服务有限公司","242");
        put("济宁兖州区硕博汽车美容服务中心","243");
        put("济宁兖州区硕博汽车美容服务中心","244");
        put("金乡县金乡街道新华润汽车装饰用品经营部","245");
        put("金乡县金乡街道卡仕顿汽修厂","246");
        put("金乡县金乡街道卫东汽车装饰服务部","247");
        put("金乡县金乡街道东海汽车装饰品销售中心","248");
        put("金乡县车伴儿汽车服务有限公司","249");
        put("金乡县金乡街道乐途汽车装饰服务部","250");
        put("金乡县金乡街道车尊爵汽车饰品店","251");
        put("金乡县金乡街道靓驰汽车装饰店","252");
        put("济宁市腾骏商贸有限公司","253");
        put("嘉祥县吉祥汽车装饰店","254");
        put("嘉祥县富通汽车装饰材料销售部","255");
        put("泰安市星期八汽车服务有限公司","256");
        put("泰安市泰山区百年车行","257");
        put("泰安市泰山区百年车行","258");
        put("泰安市泰山区百年车行","259");
        put("泰安市泰山区百年车行","260");
        put("泰安市泰山区东宝汽车美容保养中心","261");
        put("泰安市泰山区三九车仆汽车美容店","262");
        put("泰安市泰山区三九车仆汽车美容店","263");
        put("泰安市泰山区卡酷汽车服务中心","264");
        put("泰安市泰山区卡酷汽车服务中心","265");
        put("泰安市泰山区卡酷汽车服务中心","266");
        put("泰安市泰山区卡酷汽车服务中心","267");
        put("泰安市泰山区卡酷汽车服务中心","268");
        put("泰安市泰山区尊皇爱车之家美容养护中心","269");
        put("泰安松润商贸有限公司","270");
        put("泰安松润商贸有限公司","271");
        put("泰安市泰山区靓车族汽车美容中心","272");
        put("泰安市泰山区瑞利琥汽车服务店","273");
        put("泰安市泰山区源动力汽车美容服务中心","274");
        put("泰安市泰山区天山车饰店","275");
        put(" 卢刚","276");
        put("邹平环球汽车服务中心","277");
        put("邹平高新星光车饰店","278");
        put("邹平洁丽汽车装具商行","279");
        put("邹平高新第七坊汽车用品经营部","280");
        put("邹平靓车洁汽车美容","281");
        put("邹平车洁缘汽车服务中心","282");
        put("邹平高薪汇友汽车服务商行","283");
        put("邹平高薪吴海山汽车美容店","284");
        put("博兴县锦秋街道易捷美车销售部","285");
        put("博兴县锦秋街道小拇指汽车服务中心","286");
        put("博兴县锦秋办事处车后汽车美容养护中心","287");
        put("博兴县博昌办事处卡诺嘉汽车美容服务部","288");
        put("博兴县锦秋办事处铭飏汽车会所","289");
        put("博兴县城东街道办事处臻好汽车维修部","290");
        put("博兴县锦秋办事处京滨汽车俱乐部","291");
        put("博兴县锦秋办事处鑫天帝汽车美容装饰中心","292");
        put("惠民县孙武街道范红汽车装饰店","293");
        put("惠民县孙武街道健顺汽车装具店","294");
        put("惠民县鼎乾汽车服务有限公司","295");
        put("惠民县孙武街道拉雅润滑油销售中心","296");
        put("郑修波","297");
        put("惠民县孙武街道旺彩汽车装具店","298");
        put("滨州市沾化区车元素汽车美容会所","299");
        put("山东省沾化区隆达汽车美容店","300");
        put("滨州市沾化区可欣汽车美容店","301");
        put("滨州市沾化区梅特莱斯汽车美容店","302");
        put("无棣豪旺汽车服务有限公司","303");
        put("无棣县车士客汽车装潢中心","304");
        put("无棣县阿涛汽车装具中心","305");
        put("无棣县车便利汽车装饰美容中心","306");
        put("无棣县崔波汽车美容中心","307");
        put("无棣县道和汽车美容装饰店","308");
        put("无棣县车靓影汽车美容俱乐部","309");
        put("滨州群星汽车装饰超市","310");
        put("滨州群星养车服务会所","311");
        put("车满满汽车用品银座中海店 ","312");
        put("洗车人家人民医院店","313");
        put("迅驰汽车服务有限公司","314");
        put("山东滴滴汽车服务有限公司","315");
        put("滨城区兴春汽车美容服务中心","316");
        put("滨城区美车汇汽车美容装具","317");
        put("征途商贸有限公司望海分公司","318");
        put("滨城区靓洁汽车美容服务中心","319");
        put("滨州华禄汽车服务用品有限公司第一分公司","320");
        put("滨州市征途商贸有限公司","321");
        put("滨城区荣耀车王美容服务部","322");
        put("滨州滨城区众汇汽车服务中心","323");
        put("滨州保利行汽贸有限公司","324");
        put("滨州高新技术产业开发区张伟伟车饰家汽车装具店","325");
        put("滨州嘉途生活商贸有限公司","326");
        put("美美车饰汽车服务","327");
        put("无棣县爱车博士汽车服务中心","328");
        put("无棣县车饰界汽车装饰门市部","329");
        put("张店匠人汽车美容服务部","330");
        put("张店金通汽车装饰服务部","331");
        put("张店轩辕世家汽车美容店","332");
        put("淄博佳信汽车服务有限公司","333");
        put("张店亚邦源汽车装饰店","334");
        put("张店铭杰洗车服务部","335");
        put("张店共青团东路兴朴汽车美容中心","336");
        put("张店共青团东路传奇汽车维修美容中心","337");
        put("张店潘南西路一凡汽车装饰部","338");
        put("张店艾姆肯汽车美容服务部","339");
        put("张店李向宗汽车美容店","340");
        put("张店王舍汽配城尚途汽车装具商行","341");
        put("山东博派汽车服务有限公司","342");
        put("山东博派汽车服务有限公司","343");
        put("山东博派汽车服务有限公司","344");
        put("山东博派汽车服务有限公司","345");
        put("山东博派汽车服务有限公司","346");
        put("张店嘉慧汽车美容服务部","347");
        put("临淄稷下中隆汽车美容服务部","348");
        put("临淄区雪宫靓车时代装具部","349");
        put("淄博区雪宫沃特汽车用品商行","350");
        put("淄博高新区石桥菲格汽车美容店","351");
        put("周村百世特汽车服务部","352");
        put("淄川将军路广伟汽车美容店","353");
        put("周村艺佳汽车美容服务部","354");
        put("淄川般阳快车道汽车美容服务部","355");
        put("淄博丽车源汽车装饰有限公司","356");
        put("淄博松龄学军汽车用品经营部","357");
        put("淄川将军路刘雷汽车装具经营部","358");
        put("利津县美鹰汽车美容装饰中心","359");
        put("利津县车博士汽车装饰店","360");
        put("利津县车乐都汽车美容中心","361");
        put("利津县凤凰城街道璐洁汽车装饰保养中心","362");
        put("东营区鑫杰汽车装饰美容店","363");
        put("河口区六合聚美优车汽车用品俱乐部","364");
        put("河口区六合快典汽车维修服务部","365");
        put("河口区河滨路亿隆汽车装饰用品店","366");
        put("海口区海宁路龟博士汽车用品店","367");
        put("垦利区垦利街道爱慕丁汽车服务中心","368");
        put("垦利区垦利街道民丰汽车服务中心","369");
        put("垦利区垦利街道阳光汽车装饰店","370");
        put("垦利区垦利街道众鑫汽车装饰美容中心","371");
        put("垦利区垦利街道办汶洁汽车美容中心","372");
        put("垦利区垦利街道金城汽车装具部","373");
        put("河口区黄河路起航汽车用品店","374");
        put("东营市垦利区卡福汽车服务有限公司","375");
        put("东营区梅特莱斯汽车养护中心烟台路加盟店","376");
        put("山东匠联汽车服务有限公司","377");
        put("广饶县孙武路天使汽车装饰天地","378");
        put("广饶县业佳汽车服务有限公司","379");
        put("广饶经济开发区御景花园开心车栈汽车美容店","380");
        put("东营区东城美卡龙车饰店","381");
        put("东营区鑫博汽车美容店","382");
        put("东营华驰汽车维修中心","383");
        put("东营昱祥商贸有限公司","384");
        put("鑫鸿汽车美容装饰","385");
        put("东营博天汽车服务有限公司","386");
        put("东营区新鲁东车业服务中心","387");
        put("东营区纪青骏骐汽车美容店","388");
        put("东营市远超汽车服务有限公司","389");
        put("东营市黄河口瑞达汽配经营部","390");
        put("晟领汽车装饰有限公司","391");
        put("东营区瀚宇汽车装饰部","392");
        put("东营区固得轮吧推土机配件销售中心","393");
        put("东营区黄河街道万路通汽车维护中心","394");
        put("广饶县城中路车之梦汽车美容装饰中心","395");
        put("广饶县广胜路广胜汽车装饰中心","396");
        put("山东省福斯特汽车服务有限公司","397");
        put("聊城市创新一代汽车维修有限公司","398");
        put("聊城市东昌府区义龙汽车配件保养中心","399");
        put("聊城市东昌府区田广辉汽车美容装饰店","400");
        put("聊城市东昌府区铭远汽车装饰会所","401");
        put("聊城市东昌府区湖西众汇轿车修理厂","402");
        put("聊城市海源轮胎有限公司","403");
        put("聊城市东昌府区领航汽车装饰经营部","404");
        put("聊城市北方汽车维修服务部","405");
        put("聊城市东昌府区森达汽车服务部","406");
        put("阳谷县博济桥办事处燕山路卓越汽车美容装饰城","407");
        put("阳谷县狮子楼办事处棋盘街佰送商城","408");
        put("阳谷县博济桥办事处金河路鑫诚汽车维修服务中心","409");
        put("阳谷县博济桥办事处金河路凯福汽车美容中心","410");
        put("阳谷县狮子楼办事处西城路车壹号汽车美容会所","411");
        put("莘县赵金鹏汽车维修部","412");
        put("莘县浴车坊汽车美容服务部","413");
        put("莘县浴车坊汽车美容服务部","414");
        put("莘县车博士装饰门市部","415");
        put("莘县凯旋仕汽车装饰部","416");
        put("茌平县民生路车都会汽车装饰中心","417");
        put("茌平县华泰汽车影音店","418");
        put("茌平县车饰界汽车美容中心","419");
        put("飞扬汽车装饰养护中心","420");
        put("茌平县车驿汽车服务中心","421");
        put("茌平县美车邦汽车装饰中心","422");
        put("茌平县车之家汽车保养中心","423");
        put("茌平县黑马骑士汽车服务中心","424");
        put("东阿县铜城新益汽车装饰中心","425");
        put("东阿县浩宇汽车服务有限公司","426");
        put("东阿县浩宇汽车服务有限公司","427");
        put("东阿县新城世购宝马汽车俱乐部","428");
        put("东阿县新城安达轮胎销售部","429");
        put("东阿县新城唯美汽车美容服务中心","430");
        put("聊城市东昌府区亚洲之星汽车便利店","431");
        put("聊城市东昌府区亚洲之星汽车便利店","432");
        put("聊城市东昌府区亚洲之星汽车便利店","433");
        put("聊城市东昌府区亚洲之星汽车便利店","434");
        put("聊城市经济开发区广禄通汽车服务部","435");
        put("聊城市东昌府区鑫亿快修维修部","436");
        put("聊城市东昌府区鑫亿快修维修部","437");
        put("聊城市东昌府区梅特莱斯汽车美容店","438");
        put("聊城市东昌府区站前华盛汽车装饰部","439");
        put("莱芜高新区亿车汽车美容中心","440");
        put("莱芜市波波汽车服务会所","441");
        put("莱芜市宏泰汽车装饰美容中心","442");
        put("莱芜市莱城区沃福汽车用品经营部","443");
        put("莱芜市莱城区车爵士汽车美容店","444");
        put("莱芜市莱城区淘宝汽车美容店","445");
        put("莱芜市坦途汽车服务有限公司","446");
        put("莱芜市莱城区明洁汽车美容中心","447");
        put("莱芜钢城区极速车改美容中心","448");
        put("莱芜钢城区水木年华汽车俱乐部","449");
        put("莱芜市钢城区盛和汽车服务","450");
        put("济南锦泽汽车服务有限公司","451");
        put("山东欧德巴斯汽车服务有限公司第一份公司","452");
        put("山东车联社汽车服务有限公司","453");
        put("临沂市兰山区三顺汽车维修部","454");
        put("临沂市兰山区博奥汽车美容服务中心","455");
        put("左振杰","456");
        put("临沂市铂鑫汽车服务有限公司","457");
        put("景程汽车服务","458");
        put("柒车汽车服务中心","459");
        put("临沂市兰山区通达汽车配件配送中心","460");
        put("临沂市兰山区通达汽车配件配送中心","461");
        put("临沂悦途汽车服务有限公司第二分公司","462");
        put("临沂悦途汽车服务有限公司","463");
        put("临沂悦途汽车服务有限公司","464");
        put("临沂悦途汽车服务有限公司","465");


    }};


    public static void main(String[] arge) {

//        String str1 = "小拇指";
//        String str2 = "车福汽车维修有限公司-小拇指";
//        double Similarity = Cosine.getSimilarity(str1, str2);
//        System.out.println(Similarity);


        new qf_picture().process();
    }

    public void process(){
        for (String storeName : STORE_MAP.keySet()){
            processStore(storeName);
        }
    }

    // 针对某个门店名称进行处理
    private void processStore(String storeName) {
        //
        double maxSimilar = 0;
        File target_folder = null;

        // 文件夹遍历
        File[] root_file_lists = new File(ROOT_PATH).listFiles();
        for (File folder : root_file_lists) {
            if(folder.getName().indexOf(storeName) != -1){
                target_folder = folder;
                break;
            }
            // 文件不重复取得
            if(listUserPath.contains(folder.getPath().toString())){
                continue;
            }
            // 取得相似度最大的文件夹
            double this_similar = Cosine.getSimilarity(folder.getName(), storeName);
            if(this_similar > maxSimilar){
                maxSimilar = this_similar;
                target_folder = folder;
            }
        }
        if(null != target_folder){
            processFolder(target_folder, storeName);
        }else{
            System.out.println("--【"+storeName+"】没有找到相似文件夹需要手动处理");
        }
    }

    // 针对某个门店名称进行处理
    private void processFolder(File folder, String storeName) {
        File[] files = folder.listFiles();
        if(files.length == 0){
            System.out.println("--【"+folder.getName()+"】此文件夹为空" );
            return ;
        }
        // 取得文件
        File file = null;
        for(File loop_file:files){
            if(loop_file.getName().indexOf("门") != -1 || loop_file.getName().indexOf("头") != -1){
                file = loop_file;
            }
        }
        if(null == file){
            file = files[0];
        }
        // 文件复制
        File target_file = new File(TARGET_PATH + "\\" + STORE_MAP.get(storeName) + ".png");
        try {
            if(target_file.exists()){
                target_file.delete();
                System.out.println("--文件【"+target_file.getPath() + "】已存在，删除");
            }
            Files.copy(file.toPath() , target_file.toPath());
            listUserPath.add(file.toPath().toString());
            System.out.println("已处理处理"+STORE_MAP.get(storeName)+":"+STORE_MAP.get(storeName)+"_"+storeName + "_使用目录:" + file.toPath().toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


/**
 * 文本相似度比较用代码
 * 摘自：https://blog.csdn.net/fjssharpsword/article/details/53693115
 */
class Cosine {
    public static double getSimilarity(String doc1, String doc2) {
        if (doc1 != null && doc1.trim().length() > 0 && doc2 != null && doc2.trim().length() > 0) {
            Map<Integer, int[]> AlgorithmMap = new HashMap<Integer, int[]>();
            //将两个字符串中的中文字符以及出现的总数封装到，AlgorithmMap中
            for (int i = 0; i < doc1.length(); i++) {
                char d1 = doc1.charAt(i);
                if (isHanZi(d1)) {//标点和数字不处理
                    int charIndex = getGB2312Id(d1);//保存字符对应的GB2312编码
                    if (charIndex != -1) {
                        int[] fq = AlgorithmMap.get(charIndex);
                        if (fq != null && fq.length == 2) {
                            fq[0]++;//已有该字符，加1
                        } else {
                            fq = new int[2];
                            fq[0] = 1;
                            fq[1] = 0;
                            AlgorithmMap.put(charIndex, fq);//新增字符入map
                        }
                    }
                }
            }

            for (int i = 0; i < doc2.length(); i++) {
                char d2 = doc2.charAt(i);
                if (isHanZi(d2)) {
                    int charIndex = getGB2312Id(d2);
                    if (charIndex != -1) {
                        int[] fq = AlgorithmMap.get(charIndex);
                        if (fq != null && fq.length == 2) {
                            fq[1]++;
                        } else {
                            fq = new int[2];
                            fq[0] = 0;
                            fq[1] = 1;
                            AlgorithmMap.put(charIndex, fq);
                        }
                    }
                }
            }

            Iterator<Integer> iterator = AlgorithmMap.keySet().iterator();
            double sqdoc1 = 0;
            double sqdoc2 = 0;
            double denominator = 0;
            while (iterator.hasNext()) {
                int[] c = AlgorithmMap.get(iterator.next());
                denominator += c[0] * c[1];
                sqdoc1 += c[0] * c[0];
                sqdoc2 += c[1] * c[1];
            }

            return denominator / Math.sqrt(sqdoc1 * sqdoc2);//余弦计算
        } else {
            throw new NullPointerException(" the Document is null or have not cahrs!!");
        }
    }

    public static boolean isHanZi(char ch) {
        // 判断是否汉字
        return (ch >= 0x4E00 && ch <= 0x9FA5);
        /*if (ch >= 0x4E00 && ch <= 0x9FA5) {//汉字
			return true;
		}else{
			String str = "" + ch;
			boolean isNum = str.matches("[0-9]+");
			return isNum;
		}*/
		/*if(Character.isLetterOrDigit(ch)){
			String str = "" + ch;
			if (str.matches("[0-9a-zA-Z\\u4e00-\\u9fa5]+")){//非乱码
                return true;
            }else return false;
		}else return false;*/
    }

    /**
     * 根据输入的Unicode字符，获取它的GB2312编码或者ascii编码，
     *
     * @param ch 输入的GB2312中文字符或者ASCII字符(128个)
     * @return ch在GB2312中的位置，-1表示该字符不认识
     */
    public static short getGB2312Id(char ch) {
        try {
            byte[] buffer = Character.toString(ch).getBytes("GB2312");
            if (buffer.length != 2) {
                // 正常情况下buffer应该是两个字节，否则说明ch不属于GB2312编码，故返回'?'，此时说明不认识该字符
                return -1;
            }
            int b0 = (int) (buffer[0] & 0x0FF) - 161; // 编码从A1开始，因此减去0xA1=161
            int b1 = (int) (buffer[1] & 0x0FF) - 161;
            return (short) (b0 * 94 + b1);// 第一个字符和最后一个字符没有汉字，因此每个区只收16*6-2=94个汉字
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return -1;
    }
}